home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / macros / ytex / yuser.mac (.txt) < prev   
LaTeX Document  |  1991-12-01  |  35KB  |  1,204 lines

  1. % Copyright (c) 1985, 1986 Daniel C. Brotsky.  All rights reserved.
  2. % User interface for yTeX.  See the file YTEX.MAC for details.
  3. % CONTENTS
  4. % ^L-page       contents
  5. % ----------------------------------------------------------------------
  6. % 1             %% User interface to YTEX macros
  7. % 2             %% combinators
  8. % 3             %% runners
  9. % 4             %% glosses
  10. % 5             %% paragraphs
  11. % 6             %% textual displays
  12. % 7             %% lisp programs
  13. % 8             %% footnotes
  14. % 9             %% figures
  15. % 10            %% tables
  16. % 11            %% equations
  17. % 12            %% chapters and sections
  18. % 13            %% special pages
  19. % 14            %% 2 columns
  20. % 15            %% indexes
  21. % 16            %% citations
  22. % 17            %% labels
  23. % 18            %% initialization
  24. \message{combinators,}
  25. % verbatim word
  26. \def\verb {% <token>#1<token>
  27.   \begingroup\tt\specials@ther\activespaces\ \v@rb}
  28. \def\v@rb #1{%
  29.   \def\next##1#1{##1\endgroup}\next}
  30. % spread to the current hsize
  31. \newspread\spread
  32.   \setup
  33.   \endnew
  34. \let\@@spreadwidth=\spreadwidth \let\spreadwidth=\hsize
  35. % left-adjusted, center-adjusted, and right-adjusted titles
  36. \newtitle\tleft
  37.   \box \vopen
  38.   \shape \titleleft{\z@}{\z@}%
  39.   \font
  40.   \setup
  41.   \begin
  42.   \end
  43.   \endnew
  44. \newtitle\tcenter
  45.   \box \vopen
  46.   \shape \titlecenter{\z@}{\z@}%
  47.   \font
  48.   \setup
  49.   \begin
  50.   \end
  51.   \endnew
  52. \newtitle\tright
  53.   \box \vopen
  54.   \shape \titleright{\z@}{\z@}%
  55.   \font
  56.   \setup
  57.   \begin
  58.   \end
  59.   \endnew
  60. % symbols
  61. \newtextwrap\sy
  62.   \box \hopen
  63.   \setup \smltt
  64.   \before
  65.   \after
  66.   \begin
  67.   \end
  68.   \endnew
  69. \newtextwrap\sybox
  70.   \box \hbox
  71.   \setup \smltt
  72.   \before
  73.   \after
  74.   \begin
  75.   \end
  76.   \endnew
  77. \newtextwrap\ucsy
  78.   \box \hopen
  79.   \setup \smltt
  80.   \before
  81.   \after
  82.   \begin \uppercase\bgroup
  83.   \end \egroup
  84.   \endnew
  85. \newtextwrap\ucsybox
  86.   \box \hbox
  87.   \setup \smltt
  88.   \before
  89.   \after
  90.   \begin \uppercase\bgroup
  91.   \end \egroup
  92.   \endnew
  93. \def\ignore #{%
  94.   \begingroup
  95.     \def\do ##1{\catcode`##1=12\relax}%
  96.     \dospecials                 % turn off all special chars
  97.     \catcode`\\=0\relax         % need to see commands as single tokens
  98.     \catcode`\{=1\catcode`\}=2\relax    % need to recognize balanced braces
  99.     \catcode`\%=14\relax        % need to ignore comments
  100.     \let\par=\relax
  101.     \ignorereader}
  102. \long
  103. \def\ignorereader #1{%
  104.     \endgroup}
  105. \message{runners,}
  106. % contents of headers and footers
  107. \newtoks\versoleftheader
  108. \newtoks\versocenterheader
  109. \newtoks\versorightheader
  110. \newtoks\rectoleftheader
  111. \newtoks\rectocenterheader
  112. \newtoks\rectorightheader
  113. \newtoks\versoleftfooter
  114. \newtoks\versocenterfooter
  115. \newtoks\versorightfooter
  116. \newtoks\rectoleftfooter
  117. \newtoks\rectocenterfooter
  118. \newtoks\rectorightfooter
  119. \newtoks\runnerfont
  120. \rectoheader={\the\runnerfont
  121.   \line{\hbox to\z@{\the\rectoleftheader\hss}\hfil
  122.         \hbox to\z@{\hss\the\rectocenterheader\hss}\hfil
  123.         \hbox to\z@{\hss\the\rectorightheader}}}
  124. \versoheader={\the\runnerfont
  125.   \line{\hbox to\z@{\the\versoleftheader\hss}\hfil
  126.         \hbox to\z@{\hss\the\versocenterheader\hss}\hfil
  127.         \hbox to\z@{\hss\the\versorightheader}}}
  128. \rectofooter={\the\runnerfont
  129.   \line{\hbox to\z@{\the\rectoleftfooter\hss}\hfil
  130.         \hbox to\z@{\hss\the\rectocenterfooter\hss}\hfil
  131.         \hbox to\z@{\hss\the\rectorightfooter}}}
  132. \versofooter={\the\runnerfont
  133.   \line{\hbox to\z@{\the\versoleftfooter\hss}\hfil
  134.         \hbox to\z@{\hss\the\versocenterfooter\hss}\hfil
  135.         \hbox to\z@{\hss\the\versorightfooter}}}
  136. \versoleftheader={\bf\folio}
  137. \rectoleftheader={\firstm@rk}
  138. \rectorightheader={\bf\folio}
  139. \versocenterfooter={\bf\folio}
  140. \rectocenterfooter={\bf\folio}
  141. % convenient runner settings: args are toklists
  142. \let\fixedhead=\versorightheader
  143. \let\runninghead=\rectoleftheader
  144. \message{glosses,}
  145. % top gloss: copyright
  146. \newif\ifshowcopyright
  147. \newtoks\copyrightholder
  148. \def\copyrightpage {\ifshowcopyright\yestopgloss\fi}
  149. \copyrightholder={by the author}
  150. \topgloss={\regsize\bf
  151.   Copyright $\m@th\copyright$ \number\year~\the\copyrightholder\hfil
  152.   \shortdate \enspace[\daytime]}
  153. % drafts
  154. \def\draft {%
  155.   \ymessage{{Draft}}
  156.   \overfullrule=5\p@
  157.   \bottomgloss={\regsize\bf
  158.     DRAFT $\bullet$ DRAFT $\bullet$ DRAFT\hfil
  159.     \date \enspace [\daytime]}
  160.   \bottomglosstrue}
  161. \message{paragraphs,}
  162. % disciplined \rem@veindent
  163. \newif\ifvpar
  164. \def\vpar {%
  165.   \ifvpar \edef\next{\the\everypar}\ifx\next\empty \rem@veindent \fi\fi}
  166. \def\unvpar {\everypar={}}
  167. % various paragraph shapes
  168. \newpar\ivpar
  169.   \argtext
  170.   \setup
  171.   \vestindent \parindent
  172.   \starter \noindent
  173.   \endnew
  174. \newpar\ipar
  175.   \argtext
  176.   \setup
  177.   \vestindent \parindent
  178.   \starter \indent
  179.   \endnew
  180. \newdimen\partagsep
  181. \newbox\partagbox
  182. \newpar\ftpar
  183.   \argtext #1%
  184.   \setup \setbox\partagbox=\hbox{#1}%
  185.          \ifdim \wd\partagbox<\parindent
  186.            \setbox\partagbox=\hbox to\parindent{\unhbox\partagbox \hfil}%
  187.          \else
  188.            \setbox\partagbox=\hbox{\unhbox\partagbox \hskip\partagsep}\fi
  189.   \vestindent \parindent
  190.   \starter \noindent \box\partagbox \ignorespaces
  191.   \endnew
  192. \newpar\atpar
  193.   \argtext #1%
  194.   \setup
  195.   \vestindent \parindent
  196.   \starter \noindent \hbox to\parindent {\hss #1\hskip\partagsep}\ignorespaces
  197.   \endnew
  198. \newpar\vtpar
  199.   \argtext #1%
  200.   \setup \setbox\partagbox=\hbox{#1\hskip\partagsep}%
  201.   \vestindent 1\wd\partagbox
  202.   \starter \noindent \box\partagbox \ignorespaces
  203.   \endnew
  204. % bullet paragraphs and lists thereof
  205. \newpar\bpar
  206.   \argtext
  207.   \setup
  208.   \vestindent \parindent
  209.   \starter \noindent \hbox to\parindent {$\m@th\bullet$\hfil}\ignorespaces
  210.   \endnew
  211. \newelement\bullets
  212.   \setup \unvpar
  213.   \above \minbreak \prebulletspenalty \abovebulletsskip
  214.   \below \dobreak \postbulletspenalty \belowbulletsskip \vpar
  215.   \begin
  216.   \end \endgraf
  217.   \endnew
  218. \setskip\abovebulletsskip \dimen 2pt \glue \parskip \factor 500
  219. \setskip\belowbulletsskip \dimen 2pt \glue \parskip \factor 500
  220. \prebulletspenalty=-200
  221. \postbulletspenalty=-200
  222. % quotes
  223. \newtoks\quotefont
  224. \newelement\quote
  225.   \setup \advance\leftskip\parindent \advance\rightskip\parindent
  226.          \unvpar \the\quotefont \offindent
  227.   \above \vskip\baselineskip \nobreak   % compensate for smaller baseline
  228.          \begingroup \the\quotefont \vskip-\baselineskip \endgroup
  229.   \below \vpar
  230.   \begin
  231.   \end \endgraf
  232.   \endnew
  233. % ragged center (mostly from the TeXbook)
  234. \def\raggedcenter {%
  235.   \leftskip=\z@ plus2em \rightskip=\leftskip
  236.   \spaceskip=.3333em \xspaceskip=.5em \parfillskip=\z@
  237.   \pretolerance=9999 \tolerance=9999 \hbadness=9999
  238.   \hyphenpenalty=9999 \exhyphenpenalty=9999
  239.   \offindent}
  240. % ragged left
  241. \def\raggedleft {%
  242.   \leftskip=\z@ plus2em \rightskip=\z@skip
  243.   \spaceskip=.3333em \xspaceskip=.5em \parfillskip=\z@
  244.   \pretolerance=9999 \tolerance=9999 \hbadness=9999
  245.   \hyphenpenalty=9999 \exhyphenpenalty=9999
  246.   \offindent}
  247. \message{textual displays,}
  248. % nofill
  249. \newelement\nofill
  250.   \setup \offindent \setupnofill
  251.   \above \vskip\parskip                 % compensate for loss of \parskip
  252.   \below \vpar
  253.   \begin
  254.   \end \endgraf
  255.   \endnew
  256. \newtext\text
  257.   \display
  258.   \setup \hsize=\displaywidth \advance\leftskip\displayindent \setupnofill
  259.   \begin
  260.   \end
  261.   \endnew
  262. \newtext\textlines
  263.   \display \displaywidth=\hsize \displayindent=\z@
  264.   \setup \setupnofill
  265.   \begin
  266.   \end
  267.   \endnew
  268. \newtext\code
  269.   \display
  270.   \setup \hsize=\displaywidth \advance\leftskip\displayindent \tt \setupnofill
  271.   \begin
  272.   \end
  273.   \endnew
  274. \newtext\codelines
  275.   \display \displaywidth=\hsize \displayindent=\z@
  276.   \setup \tt \setupnofill
  277.   \begin
  278.   \end
  279.   \endnew
  280. % verbatim material
  281. \def\beginverbatim {%
  282.   \par
  283.   \beginpgroup
  284.   \vskip\parskip
  285.   \setupverbatim
  286.   \re@dverbatim}
  287. {\obeylines \catcode`\|=\@scape \catcode`\\=\@ther %
  288.  |gdef|re@dverbatim#1^^M#2\endverbatim{#1#2|endgroup}}
  289. \newverbatim\verb
  290.   \begincs \beginverb
  291.   \readcs \readv@rb
  292.   \endcsname endverb%
  293.   \display
  294.   \setup \hsize=\displaywidth \advance\leftskip\displayindent \tt
  295.   \begin
  296.   \end
  297.   \endnew
  298. \newverbatim\verblines
  299.   \begincs \beginverblines
  300.   \readcs \readv@rblines
  301.   \endcsname endverblines%
  302.   \display \displaywidth=\hsize \displayindent=\z@
  303.   \setup \tt
  304.   \begin
  305.   \end
  306.   \endnew
  307. \message{lisp programs,}
  308. % make semis active a la \obeylines
  309. {\catcode`\;=\@ctive
  310.  \gdef\obeysemis {\catcode`\;=\@ctive\relax \let;=\lispsemi}}
  311. % \beginl@sp <body> \endl@sp
  312. \def\beginl@sp {%
  313.   \beginpgroup
  314.   % semis start comments unless immediately followed by \pbrk
  315.   \def\lispsemi{\futurelet\next\l@spsemi}%
  316.   \def\l@spsemi{\ifx\next\pbrk \let\next=\relax
  317.                   \else        \let\next=\l@spcomment\fi
  318.                   \next}%
  319.   \obeysemis
  320.   % spaces made active so they start paragraphs
  321.   %   and so multiple spaces aren't collapsed to one.
  322.   \activespaces\ %
  323.   % nofill via every line a par, if spaces start next line
  324.   %   we do a \noindent to make sure a par gets started.
  325.   % in addition, turn off interline skip and use struts
  326.   %   to insure baseline spacing
  327.   \offinterlineskip
  328.   \parskip=\z@skip
  329.   \def\par{\ifhmode \nobreak\strut \fi \endgraf}
  330.   \obeylines
  331.   % compensate for loss of baseline spacing
  332.   \skip@=\dp\strutbox \advance\skip@ -\prevdepth
  333.   \ifdim \skip@>\z@ \vskip\skip@ \nobreak \fi
  334.   % make ',` do the right thing; make &, #, <> harmless
  335.   \makebqspecial
  336.   \makeandother
  337.   \makesharpother
  338.   \makelgtother
  339.   \vbox\bgroup}
  340. \def\endl@sp {%
  341.   \egroup
  342.   \endpgroup}
  343. {\obeylines                     % for defs that happen where ^^M is active
  344. % each program is a box, preventing page splits, but we
  345. %   make the \pbrk macro work a la \noalign whose arg is
  346. %   the entire rest of the line.
  347. \gdef\pbrk #1^^M{%
  348.     \egroup%
  349.   \def\next{#1}%
  350.   \ifx\empty\next%
  351.     \smallskip
  352.     \else \begingroup \activespaces\space \next\endgroup\fi%
  353.   \vbox\bgroup%
  354.     ^^M}                        % end with a CR since arg did
  355. % semicolons start program comments which end with the end
  356. % of the line.  These comments are in roman, in an \hbox to
  357. % avoid line breaking, <> become angle brackets,
  358. % and ; becomes harmless
  359. \gdef\l@spcomment {%
  360.   \begingroup%
  361.   \def\lispsemi{;\kern\p@}\obeysemis    % this works even if ; already read
  362.   \def^^M{\egroup\endgroup^^M}% end with ^^M since line does
  363.   \leavevmode\hbox\bgroup \rm \strut;\kern\p@}%
  364. } % end of def group
  365. \newtoks\lispfont
  366. \newtext\lisp
  367.   \display
  368.   \setup \hsize=\displaywidth \advance\leftskip\displayindent
  369.          \the\lispfont
  370.   \begin \beginl@sp
  371.   \end \endl@sp
  372.   \endnew
  373. \newtext\lisplines
  374.   \display \displaywidth=\hsize \displayindent=\z@
  375.   \setup \the\lispfont
  376.   \begin \beginl@sp
  377.   \end \endl@sp
  378.   \endnew
  379. \message{footnotes,}
  380. \let\footdef=\relax
  381. \let\footref=\relax
  382. \newfloat\footn@te
  383.   \type \botfloat
  384.   \floatsetup \setupfootnotefloat
  385.   \setup \setupfootnote
  386.   \floatabove
  387.   \floatbelow
  388.   \begin \startfootnote
  389.   \end \strut\endgraf
  390.   \endnew
  391. \def\setupfootnotefloat {%
  392.   \splittopskip=\ht\strutbox % top baseline for broken footnotes
  393.   \splitmaxdepth=\dp\strutbox
  394.   \floatingpenalty=\@M
  395.   \setupfootnotefloathook}
  396. \def\setupfootnotefloathook {}
  397. \newtoks\footnotefont
  398. \def\setupfootnote {%
  399.   \interlinepenalty=\interfootnotelinepenalty
  400.   \leftskip=\footnotemarkerwidth
  401.   \parfillskip=\filskip
  402.   \rightskip=\z@skip
  403.   \spaceskip=\z@skip
  404.   \xspaceskip=\z@skip
  405.   \the\footnotefont
  406.   \setupfootnotehook}
  407. \def\setupfootnotehook {}
  408. % footnote markers
  409. \newdimen\footnotemarkerwidth
  410. \def\footstrut {\vbox to\splittopskip{}}
  411. \def\startfootnote #1{%
  412.   \noindent \llap{#1}\footstrut}
  413. % hmode footnote invocation
  414. \def\footnote #1{\let\@sf\empty
  415.   \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
  416.   #1\@sf\beginfootn@te{#1}\futurelet\next\fo@t}
  417. \def\@foot {\endfootn@te}
  418. % numbered hmode footnote
  419. \def\nfootnote #1{\footnote{$\m@th^{#1}$}}
  420. % vmode footnote invocation
  421. \def\vfootnote #1{\beginfootn@te{#1}\futurelet\next\fo@t}
  422. % general footnote invocation
  423. \newfloat\footmatter
  424.   \type \botfloat
  425.   \floatsetup \setupfootnotefloat \leftskip=\z@skip
  426.   \setup \setupfootnote
  427.   \floatabove
  428.   \floatbelow
  429.   \begin \noindent \footstrut
  430.   \end \strut\endgraf
  431.   \endnew
  432. \message{figures,}
  433. \let\figdef=\relax
  434. \let\figref=\relax
  435. % lines above and below figures
  436. \newif\iffigureline
  437. \newdimen\figurelinedrop
  438. \def\figl@nabove {%
  439.   \iffigureline \hrule \vskip\figurelinedrop\relax \fi}
  440. \def\figl@nbelow {%
  441.   \iffigureline \nobreak \vskip\figurelinedrop \hrule\relax \fi}
  442. % figure environment definitions
  443. \newdimen\captionindent
  444. \newtoks\captionfont
  445. \def\setupcaption {%
  446.   \leftskip=\captionindent
  447.   \rightskip=\captionindent
  448.   \the\captionfont
  449.   \parskip=\z@skip
  450.   \everypar={}%
  451.   \vpar
  452.   \setupcaptionhook}
  453. \def\setupcaptionhook {}
  454. \newelement\c@ption
  455.   \setup \setupcaption
  456.   \above \dobreak \prec@ptionpenalty \abovec@ptionskip
  457.   \below  \dobreak \postc@ptionpenalty \belowc@ptionskip
  458.   \begin
  459.   \end \ifhmode \vrule width\z@ height\z@ depth\dp\strutbox \fi \endgraf
  460.   \endnew
  461. \let\abovecaptionskip=\abovec@ptionskip
  462. \let\belowcaptionskip=\belowc@ptionskip
  463. \let\precaptionpenalty=\prec@ptionpenalty
  464. \let\postcaptionpenalty=\postc@ptionpenalty
  465. \def\setupfigure {%
  466.   \let\begincaption=\beginc@ption
  467.   \let\endcaption=\endc@ption
  468.   \let\caption=\c@ption
  469.   \leftskip=\z@skip
  470.   \rightskip=\z@skip
  471.   \spaceskip=\z@skip
  472.   \xspaceskip=\z@skip
  473.   \parfillskip=\filskip
  474.   \everypar={}%
  475.   \setupfigurehook}
  476. \def\setupfigurehook {}
  477. % figure type indicators
  478. \newif\ifstationaryfigur@
  479. \newif\ifsectionfigur@
  480. \newif\iftopfigur@
  481. \newif\iffloatingfigur@
  482. % stationary figures
  483. \newelement\stationaryfigure
  484.   \setup \stationaryfigur@true \setupfigure
  485.   \above \minbreak \prestationaryfigurepenalty \abovestationaryfigureskip
  486.          \nointerlineskip
  487.   \below \dobreak \poststationaryfigurepenalty \belowstationaryfigureskip
  488.          \nointerlineskip
  489.   \begin \vbox\bgroup \figl@nabove
  490.   \end \figl@nbelow \egroup
  491.   \endnew
  492. \abovestationaryfigureskip=\bigskipamount
  493. \belowstationaryfigureskip=\bigskipamount
  494. \prestationaryfigurepenalty=\z@
  495. \poststationaryfigurepenalty=-200
  496. \newpage\pagestationaryfigure
  497.   \setup \stationaryfigur@true \setupfigure
  498.   \glue
  499.   \begin \vbox to\vsize\bgroup \figl@nabove
  500.   \end \figl@nbelow \vskip \z@ plus\@M\p@ \egroup
  501.   \endnew
  502. \def\stationaryfigures {%
  503.   \let\figure=\stationaryfigure
  504.   \let\pagefigure=\stationarypagefigure
  505.   \let\beginfigure=\beginstationaryfigure
  506.   \let\endfigure=\endstationaryfigure
  507.   \let\beginpagefigure=\beginstationarypagefigure
  508.   \let\endpagefigure=\endstationarypagefigure
  509.   \let\abovefigureskip=\abovestationaryfigureskip
  510.   \let\belowfigureskip=\belowstationaryfigureskip
  511.   \let\prefigurepenalty=\prestationaryfigurepenalty
  512.   \let\postfigurepenalty=\poststationaryfigurepenalty}
  513. % section figures
  514. \newelement\sectionfigure
  515.   \setup \sectionfigur@true \setupfigure
  516.   \above \dobreak \presectionfigurepenalty \abovesectionfigureskip
  517.          \nointerlineskip
  518.   \below \dobreak \postsectionfigurepenalty \belowsectionfigureskip
  519.          \nointerlineskip
  520.   \begin \vbox\bgroup \figl@nabove
  521.   \end \figl@nbelow \egroup
  522.   \endnew
  523. \abovesectionfigureskip=\z@skip
  524. \belowsectionfigureskip=\fillskip
  525. \presectionfigurepenalty=\@M
  526. \postsectionfigurepenalty=-200
  527. \newpage\sectionpagefigure
  528.   \setup \sectionfigur@true \setupfigure
  529.   \glue
  530.   \begin \vbox to\vsize\bgroup \figl@nabove
  531.   \end \figl@nbelow \vskip \z@ plus\@M\p@ \egroup
  532.   \endnew
  533. \def\sectionfigures {%
  534.   \let\figure=\sectionfigure
  535.   \let\pagefigure=\sectionpagefigure
  536.   \let\beginfigure=\beginsectionfigure
  537.   \let\endfigure=\endsectionfigure
  538.   \let\beginpagefigure=\beginsectionpagefigure
  539.   \let\endpagefigure=\endsectionpagefigure
  540.   \let\abovefigureskip=\abovesectionfigureskip
  541.   \let\belowfigureskip=\belowsectionfigureskip
  542.   \let\prefigurepenalty=\presectionfigurepenalty
  543.   \let\postfigurepenalty=\postsectionfigurepenalty}
  544. % floating top figures
  545. \newskip\abovetopfigureskip \abovetopfigureskip=\z@skip
  546. \newskip\belowtopfigureskip \belowtopfigureskip=\bigskipamount
  547. \newcount\pretopfigurepenalty \pretopfigurepenalty=100
  548. \newcount\posttopfigurepenalty \posttopfigurepenalty=\z@
  549. \newfloat\topfigure
  550.   \type \topfloat
  551.   \floatsetup \floatingpenalty\posttopfigurepenalty
  552.               \splitmaxdepth\maxdimen \splittopskip\z@skip
  553.   \setup \topfigur@true \setupfigure
  554.   \floatabove \penalty\pretopfigurepenalty \vskip\abovetopfigureskip
  555.               \nointerlineskip
  556.   \floatbelow \nobreak \vskip\belowtopfigureskip
  557.   \begin \vbox\bgroup \figl@nabove
  558.   \end \figl@nbelow \egroup
  559.   \endnew
  560. \newpagefloat\toppagefigure
  561.   \type \topfloat
  562.   \floatsetup \penalty\pretopfigurepenalty
  563.               \floatingpenalty\posttopfigurepenalty
  564.               \splitmaxdepth\maxdimen \splittopskip\z@skip
  565.   \setup \topfigur@true \setupfigure
  566.   \above
  567.   \below
  568.   \begin \vbox to\vsize\bgroup \figl@nabove
  569.   \end \figl@nbelow \vskip \z@ plus\@M\p@ \egroup
  570.   \endnew
  571. \gdef\topfigures {%
  572.   \let\figure=\topfigure
  573.   \let\pagefigure=\toppagefigure
  574.   \let\beginfigure=\begintopfigure
  575.   \let\endfigure=\endtopfigure
  576.   \let\beginpagefigure=\begintoppagefigure
  577.   \let\endpagefigure=\endtoppagefigure
  578.   \let\abovefigureskip=\abovetopfigureskip
  579.   \let\belowfigureskip=\belowtopfigureskip
  580.   \let\prefigurepenalty=\pretopfigurepenalty
  581.   \let\postfigurepenalty=\posttopfigurepenalty}
  582. % inline/floating figures
  583. \newskip\floatabovefloatingfigureskip
  584. \newskip\floatbelowfloatingfigureskip
  585. \newcount\floatprefloatingfigurepenalty
  586. \newcount\floatpostfloatingfigurepenalty
  587. \floatabovefloatingfigureskip=\z@skip
  588. \floatbelowfloatingfigureskip=\bigskipamount
  589. \floatprefloatingfigurepenalty=100
  590. \floatpostfloatingfigurepenalty=\z@
  591. \newskip\abovefloatingfigureskip \abovefloatingfigureskip=\bigskipamount
  592. \newskip\belowfloatingfigureskip \belowfloatingfigureskip=\bigskipamount
  593. \newcount\prefloatingfigurepenalty \prefloatingfigurepenalty=\z@
  594. \newcount\postfloatingfigurepenalty \postfloatingfigurepenalty=-200
  595. \newfitfloat\floatingfigure
  596.   \type \topfloat
  597.   \floatsetup \floatingpenalty\floatpostfloatingfigurepenalty
  598.               \splitmaxdepth\maxdimen \splittopskip\z@skip
  599.   \setup \floatingfigur@true \setupfigure
  600.   \floatabove \penalty\floatprefloatingfigurepenalty
  601.               \vskip\floatabovefloatingfigureskip
  602.               \nointerlineskip
  603.   \floatbelow \nobreak \vskip\floatbelowfloatingfigureskip
  604.   \above \penalty\prefloatingfigurepenalty
  605.          \vskip\abovefloatingfigureskip
  606.          \nointerlineskip
  607.   \below \penalty\postfloatingfigurepenalty
  608.          \vskip\belowfloatingfigureskip
  609.          \nointerlineskip \vpar
  610.   \begin \vbox\bgroup \figl@nabove
  611.   \end \figl@nbelow \egroup
  612.   \endnew
  613. \newpagefloat\floatingpagefigure
  614.   \type \topfloat
  615.   \floatsetup \penalty\floatprefloatingfigurepenalty
  616.               \floatingpenalty\floatpostfloatingfigurepenalty
  617.               \splitmaxdepth\maxdimen \splittopskip\z@skip
  618.   \setup \floatingfigur@true \setupfigure
  619.   \above
  620.   \below
  621.   \begin \vbox to\vsize\bgroup \figl@nabove
  622.   \end \figl@nbelow \vskip \z@ plus\@M\p@ \egroup
  623.   \endnew
  624. \gdef\floatingfigures {%
  625.   \let\figure=\floatingfigure
  626.   \let\pagefigure=\floatingpagefigure
  627.   \let\beginfigure=\beginfloatingfigure
  628.   \let\endfigure=\endfloatingfigure
  629.   \let\beginpagefigure=\beginfloatingpagefigure
  630.   \let\endpagefigure=\endfloatingpagefigure
  631.   \let\abovefigureskip=\abovefloatingfigureskip
  632.   \let\belowfigureskip=\belowfloatingfigureskip
  633.   \let\prefigurepenalty=\prefloatingfigurepenalty
  634.   \let\postfigurepenalty=\postfloatingfigurepenalty}
  635. \message{tables,}
  636. \let\tabdef=\relax
  637. \let\tabref=\relax
  638. \newtable\table
  639.   \leftdelim [%
  640.   \rightdelim ]%
  641.   \before \vbox\bgroup
  642.   \after \egroup
  643.   \begin
  644.   \end
  645.   \endnew
  646. \newtable\toptable
  647.   \leftdelim [%
  648.   \rightdelim ]%
  649.   \before \vtop\bgroup
  650.   \after \egroup
  651.   \begin
  652.   \end
  653.   \endnew
  654. \newtable\centertable
  655.   \leftdelim [%
  656.   \rightdelim ]%
  657.   \before \vcenter\bgroup
  658.   \after \egroup
  659.   \begin
  660.   \end
  661.   \endnew
  662. \newtable\opentable
  663.   \leftdelim [%
  664.   \rightdelim ]%
  665.   \before
  666.   \after
  667.   \begin
  668.   \end
  669.   \endnew
  670. \newtable\displaytable
  671.   \leftdelim [%
  672.   \rightdelim ]%
  673.   \before \tablewidth=\hsize$$
  674.   \after $$
  675.   \begin
  676.   \end
  677.   \endnew
  678. \message{equations,}
  679. % equation numbering
  680. \let\eqdef=\relax
  681. \let\eqref=\relax
  682. % synonyms for $$
  683. \def\beginmath {$$}
  684. \def\endmath {$$}
  685. \def\math #1{$$#1$$}
  686. \message{chapters and sections,}
  687. \let\secref=\relax
  688. \let\secdef=\relax
  689. % are section, etc. headings centered or left-flush
  690. \newif\ifcenterheadings
  691. % chapters
  692. \newtoks\chapterfont
  693. \newtitle\chaptertitle
  694.   \box \vopen
  695.   \shape \ifcenterheadings \titlecenter{\z@}{\z@}\else
  696.                            \titleleft{\z@}{\z@}\fi
  697.   \font \the\chapterfont
  698.   \setup \interlinepenalty=\@M
  699.   \begin
  700.   \end
  701.   \endnew
  702. \def\chaptersetup {%
  703.   \chaptersetuphook}
  704. \def\chaptersetuphook {}
  705. \newelement\chapter
  706.   \setup \get@rg\endchapter \chaptersetup
  707.   \above \minbreak \prechapterpenalty \abovechapterskip
  708.   \below \dobreak \postchapterpenalty \belowchapterskip \vpar
  709.   \begin \get@rg
  710.   \end \ymessage{{Chapter: \the\toks@}}\chaptertitle{\the\toks@}%
  711.   \endnew
  712. \setskip\abovechapterskip \dimen 36pt \glue \parskip \factor 3000
  713. \setskip\belowchapterskip \dimen 18pt \glue \parskip \factor 2000
  714. \prechapterpenalty=-500
  715. \postchapterpenalty=10000
  716. \newelement\pchapter
  717.   \setup \get@rg\endpchapter \chaptersetup
  718.   \above \rectosupereject
  719.   \below \dobreak \postchapterpenalty \belowchapterskip \vpar
  720.   \begin \get@rg
  721.   \end \ymessage{{Chapter: \the\toks@}}\chaptertitle{\the\toks@}%
  722.   \endnew
  723. % starts sections.
  724. \newtoks\sectionfont
  725. \newtitle\sectiontitle
  726.   \box \vbottom
  727.   \shape \ifcenterheadings \titlecenter{\z@}{\z@}\else
  728.                            \titleleft{\z@}{\z@}\fi
  729.   \font \the\sectionfont
  730.   \setup
  731.   \begin
  732.   \end
  733.   \endnew
  734. \def\sectionsetup {%
  735.   \sectionsetuphook}
  736. \def\sectionsetuphook {}
  737. \newelement\section
  738.   \setup \get@rg\endsection \sectionsetup
  739.   \above \minbreak \presectionpenalty \abovesectionskip
  740.   \below \dobreak \postsectionpenalty \belowsectionskip \vpar
  741.   \begin \get@rg
  742.   \end \ymessage{{Section: \the\toks@}}\sectiontitle{\the\toks@}%
  743.   \endnew
  744. \setskip\abovesectionskip \dimen 18pt \glue \parskip \factor 3000
  745. \setskip\belowsectionskip \dimen  9pt \glue \parskip \factor 2000
  746. \presectionpenalty=-200
  747. \postsectionpenalty=10000
  748. \let\beginsubsection=\beginsection
  749. \let\endsubsection=\endsection
  750. \let\subsection=\section
  751. \let\beginsubsubsection=\beginsubsection
  752. \let\endsubsubsection=\endsubsection
  753. \let\subsubsection=\subsection
  754. % simple heading
  755. \newtoks\headingfont
  756. \newtitle\headingtitle
  757.   \box \vbottom
  758.   \shape \ifcenterheadings \titlecenter{\z@}{\z@}\else
  759.                            \titleleft{\z@}{\z@}\fi
  760.   \font \the\headingfont
  761.   \setup
  762.   \begin
  763.   \end
  764.   \endnew
  765. \def\headingsetup {%
  766.   \headingsetuphook}
  767. \def\headingsetuphook {}
  768. \newelement\heading
  769.   \setup \get@rg\endheading \headingsetup
  770.   \above \minbreak \preheadingpenalty \aboveheadingskip
  771.   \below \dobreak \postheadingpenalty \belowheadingskip \vpar
  772.   \begin \get@rg
  773.   \end \ymessage{{Heading: \the\toks@}}\headingtitle{\the\toks@}%
  774.   \endnew
  775. \setskip\aboveheadingskip \dimen 9pt \glue \parskip \factor 1000
  776. \setskip\belowheadingskip \dimen 4pt \glue \parskip \factor 1000
  777. \preheadingpenalty=-200
  778. \postheadingpenalty=10000
  779. \message{special pages,}
  780. % titling pages
  781. \newsuperpage\titlingpage
  782.   \setup \norunners \copyrightpage
  783.   \glue \vfil
  784.   \begin
  785.   \end
  786.   \endnew
  787. % main title pages
  788. \newelement\titlepage
  789.   \setup \titlepagedefs
  790.   \above
  791.   \below
  792.   \begin \begintitlingpage \global\pageno=\z@ \ymessage{{Main title}}
  793.   \end \endgraf \endtitlingpage \global\pageno=\@ne
  794.   \endnew
  795. % title pages for sub-parts of a book, etc.
  796. \newelement\partpage
  797.   \setup \titlepagedefs
  798.   \above
  799.   \below
  800.   \begin \begintitlingpage \ymessage{{Part title}}
  801.   \end \endgraf \endtitlingpage
  802.   \endnew
  803. % titles and abstracts
  804. \newtoks\titlefont
  805. \newtoks\authorfont
  806. \newtitle\title
  807.   \box \vbottom
  808.   \shape \titleleft{\z@}{\z@}%
  809.   \font \the\titlefont
  810.   \setup
  811.   \begin
  812.   \end
  813.   \endnew
  814. \newtitle\ctitle
  815.   \box \vbottom
  816.   \shape \titlecenter{\z@}{\z@}%
  817.   \font \the\titlefont
  818.   \setup
  819.   \begin
  820.   \end
  821.   \endnew
  822. \newtitle\author
  823.   \box \vbottom
  824.   \shape \titleleft{\z@}{\z@}%
  825.   \font \the\authorfont
  826.   \setup
  827.   \begin
  828.   \end
  829.   \endnew
  830. \newtitle\cauthor
  831.   \box \vbottom
  832.   \shape \titlecenter{\z@}{\z@}%
  833.   \font \the\authorfont
  834.   \setup
  835.   \begin
  836.   \end
  837.   \endnew
  838. \newtoks\abstractfont
  839. \newdimen\abstractindent
  840. \newelement\abstract
  841.   \setup \the\abstractfont \parindent=2em%
  842.          \leftskip=\abstractindent \rightskip=\abstractindent
  843.   \above \minbreak \preabstractpenalty \aboveabstractskip
  844.   \below \dobreak \postabstractpenalty \belowabstractskip
  845.   \begin
  846.   \end \endgraf
  847.   \endnew
  848. \newtoks\bottomtextfont
  849. \def\titlepagedefs {%
  850.   \newelement\bottomtext
  851.     \setup \the\bottomtextfont \offindent
  852.     \above \bigskip \vfill
  853.     \below
  854.     \begin
  855.     \end \endgraf
  856.     \endnew}
  857. \message{2 columns,}
  858. % N.B. this stuff mostly adapted from the TeXbook
  859. % parameters
  860. \newdimen\columnskip
  861. \newbox\partialp@ge
  862. \newdimen\onec@lhsize
  863. \newdimen\onec@lvsize
  864. \newtoks\onec@loutput
  865. \newdimen\twoc@lvsize
  866. \def\setuptwocolumn {%
  867.   \trimpagesfalse
  868.   \onec@lfigfoot
  869.   \def\columneject{\vfil\penalty200}%
  870.   \baselinefactor={1.2}\setnormalbaselines
  871.   \spaceskip=.3333em plus .3333em minus .1666em
  872.   \xspaceskip=.3333em plus .6666em minus .0833em
  873.   \advance\parskip by 0pt plus 2pt
  874.   \setuptwocolumnhook}
  875. \def\setuptwocolumnhook {}
  876. % make figures and footnotes be one column
  877. \def\onec@lfigfoot {%
  878.   \topmag=2000%
  879.   \botmag=2000%
  880.   \addtodef\setupfigurehook{%
  881.     \iffloatingfigur@
  882.       \errhelp={I will assume it doesn't float.}%
  883.       \errmessage{You can't use a floating figure in two-column text.}%
  884.     \fi
  885.     \iftopfigur@ \hsize=\onec@lhsize \fi
  886.     \vsize=\onec@lvsize}%
  887.   \addtodef\setupfootnotehook{\hsize=\onec@lhsize}}
  888. \def\begintwocolumntext {%
  889.   \begingroup
  890.   \onec@lhsize=\hsize
  891.   \onec@lvsize=\vsize
  892.   \onec@loutput=\output
  893.   \output={\global\setbox\partialp@ge=\vbox{\unvbox\@cclv}}%
  894.   \let\dosupereject=\twoc@lsupereject
  895.   \eject
  896.   \output={\twoc@lout}%
  897.   \hsize=.5\hsize \advance\hsize by-.5\columnskip
  898.   \vsize=2\vsize  \advance\vsize by2pc\relax
  899.   \twoc@lvsize=\vsize
  900.   \advance\vsize by-2\ht\partialp@ge
  901.   \setuptwocolumn}
  902. \def\endtwocolumntext {%
  903.   \output={\balancec@ls}%
  904.   \eject
  905.   \global\output=\onec@loutput
  906.   \global\vsize=\onec@lvsize
  907.   \endgroup
  908.   \pagegoal=\vsize}
  909. \def\twocolumntext #1{\begintwocolumntext #1\endtwocolumntext}
  910. \def\twoc@lout {%
  911.   \dimen@=\onec@lvsize \advance\dimen@ by-\ht\partialp@ge
  912.   \advance\dimen@ by-\ht\topfloat \advance\dimen@ by-\dp\topfloat
  913.   \advance\dimen@ by-\ht\botfloat \advance\dimen@ by-\dp\botfloat
  914.   \ifdim \dimen@>\baselineskip
  915.     \dimen@i=\ht\@cclv \advance\dimen@i\dp\@cclv
  916.     \ifdim \dimen@i>\z@
  917.       \splittopskip=\topskip \splitmaxdepth=\maxdimen
  918.       \setbox\z@=\vsplit\@cclv to\dimen@
  919.       \setbox\@ne=\vsplit\@cclv to\dimen@
  920.     \else
  921.       \setbox\z@=\box\voidb@x
  922.       \setbox\@ne=\box\voidb@x
  923.     \fi
  924.   \else
  925.     \setbox\z@=\box\voidb@x
  926.     \setbox\@ne=\box\voidb@x
  927.   \fi
  928.   \def\line{\hbox to\onec@lhsize}%
  929.   \let\pagebody=\twoc@lpagebody
  930.   \ytexoutput
  931.   \global\vsize=\twoc@lvsize
  932.   \unvbox\@cclv
  933.   \penalty\outputpenalty}
  934. \def\twoc@lsupereject {%
  935.   \ifnum\insertpenalties>\z@ % something is being held over
  936.     \hbox{}\kern-\topskip\nobreak\vskip 0pt plus.5\vsize\penalty-200%
  937.     \hbox{}\kern-\topskip\nobreak\vskip 0pt plus.5\vsize\supereject\fi}
  938. \def\twoc@lpagebody {%
  939.   \vbox{\twoc@lpagecontents}}
  940. \def\twoc@lpagecontents {%
  941.   \dimen@i=\ht\partialp@ge \advance\dimen@i\ht\z@
  942.   \ifvoid\topfloat\else
  943.     \dimen@=\ht\topfloat \advance\dimen@\dp\topfloat
  944.     \unvbox\topfloat
  945.     \ifdim \dimen@>\z@ \ifdim\dimen@i>\z@ \the\topsep\fi\fi
  946.   \fi
  947.   \unvbox\partialp@ge
  948.   \wd\z@=\hsize \wd\@ne=\hsize
  949.   \hbox to\onec@lhsize{\box\z@\hfil\box\@ne}
  950.   \ifvoid\botfloat\else
  951.     \dimen@=\ht\botfloat \advance\dimen@\dp\botfloat
  952.     \ifdim \dimen@>\z@ \ifdim\dimen@i>\z@ \the\botsep\fi\fi
  953.     \unvbox\botfloat
  954.   \fi}
  955. \def\balancec@ls {%
  956.   \setbox\z@=\vbox{\unvbox\@cclv}%
  957.   \dimen@=\ht\z@ \advance\dimen@ by\topskip \advance\dimen@ by-\baselineskip
  958.   \divide\dimen@ by2 \splittopskip=\topskip \splitmaxdepth=\maxdimen
  959.   {\vbadness=10000
  960.     \loop \global\setbox\tw@=\copy\z@ \global\setbox\@ne=\vsplit\tw@ to\dimen@
  961.     \ifdim\ht\tw@>\dimen@ \global\advance\dimen@ by\p@ \repeat}
  962.   \setbox\z@=\vbox to\dimen@{\unvbox\@ne}%
  963.   \setbox\@ne=\vbox to\dimen@{\unvbox\tw@}%
  964.   \global\output={\balancing@rror}
  965.   \unvbox\partialp@ge
  966.   \wd\z@=\hsize \wd\@ne=\hsize
  967.   \hbox to\onec@lhsize{\box\z@\hfil\box\@ne}}
  968. \def\balancing@rror {%
  969.   \errhelp={Please change the page into one that works.}%
  970.   \errmessage{Page can't be balanced.}%
  971.   \def\line{\hbox to\onec@lhsize}%
  972.   \def\pagebody{\vbox{\unvbox\@cclv}}%
  973.   \ytexoutput}
  974. % complete double columns
  975. \newif\iffirstc@l
  976. \newbox\firstc@l
  977. \newbox\secondc@l
  978. \def\setupdoublecolumn {%
  979.   \trimpagesfalse
  980.   \def\pageeject{%
  981.     \filpage\iffirstc@l \else \line{}\filpage \fi}%
  982.   \baselinefactor={1.2}\setnormalbaselines
  983.   \spaceskip=.3333em plus .3333em minus .1666em
  984.   \xspaceskip=.3333em plus .6666em minus .0833em
  985.   \advance\parskip by 0pt plus 2pt
  986.   \setupdoublecolumnhook}
  987. \def\setupdoublecolumnhook {}
  988. \def\begindoublecolumn {%
  989.   \begingroup
  990.   \onec@lhsize=\hsize
  991.   \output={\box\@cclv=\voidb@x}%
  992.   \eject
  993.   \output={\doublec@lout}%
  994.   \global\firstc@ltrue
  995.   \hsize=.5\hsize \advance\hsize by-.5\columnskip
  996.   \setupdoublecolumn}
  997. \def\enddoublecolumn {%
  998.   \pageeject
  999.   \endgroup
  1000.   \pagegoal=\vsize}
  1001. \def\doublecolumn #1{\begindoublecolumn #1\enddoublecolumn}
  1002. \def\doublec@lout {%
  1003.   \iffirstc@l
  1004.     \def\line{\hbox to\onec@lhsize}%
  1005.     \global\setbox\firstc@l=\pagebody
  1006.     \def\next{\global\firstc@lfalse}
  1007.   \else
  1008.     \def\line{\hbox to\onec@lhsize}%
  1009.     \global\setbox\secondc@l=\pagebody
  1010.     \wd\firstc@l=\hsize
  1011.     \wd\secondc@l=\hsize
  1012.     \def\pagecontents{\vbox{\line{\box\firstc@l\hfil\box\secondc@l}}}%
  1013.     \def\next{\ytexoutput\global\firstc@ltrue}%
  1014.   \fi
  1015.   \next}
  1016. \message{indexes,}
  1017. \gdef\beginindex {%
  1018.   \beginpgroup
  1019.   \def\entry##1{%
  1020.     \hangindent=2\parindent
  1021.     \hangafter=\@ne
  1022.     \noindent ##1\par}
  1023.   \def\subentry##1{%
  1024.     \hangindent=2\parindent
  1025.     \hangafter=\@ne
  1026.     \indent ##1\par}
  1027.   \raggedright
  1028.   \exhyphenpenalty=\@M
  1029.   \tolerance=\@M
  1030.   \interlinepenalty=\@M
  1031.   \begintwocolumntext}
  1032. \gdef\endindex {%
  1033.   \endtwocolumntext
  1034.   \endpgroup}
  1035. \message {citations,}
  1036. \def\writec@te {\write\m@ne}
  1037. \def\setciteaux #1{%
  1038.   \stripn@me{}#1%
  1039.   \edef\writec@te{\expandafter\noexpand\csname write\next \endcsname}}
  1040. \def\c@te #1{%
  1041.   \expandafter\ifx \csname @cd-#1\endcsname \relax
  1042.     \expandafter\let\csname @cd-#1\endcsname=\cite%
  1043.     \writec@te{\string\citation{#1}}%
  1044.   \fi
  1045.   \expandafter\ifx \csname @cr-#1\endcsname \relax
  1046.     \expandafter\def\csname @cr-#1\endcsname{??}%
  1047.     \ywarning{{Citation #1 undefined}}%
  1048.   \fi}
  1049. \def\cite #1{%
  1050.   \c@te{#1}%
  1051.   \csname @cr-#1\endcsname}
  1052. \def\explicitcite #1#2{%
  1053.   \c@te{#1}%
  1054.   #2}
  1055. \let\ecite=\explicitcite
  1056. \def\citation #1{\relax}
  1057. \def\bibcite #1#2{%
  1058.   \expandafter\def\csname @cr-#1\endcsname{#2}}
  1059. \def\setbibstyle #1{%
  1060.   \toks@={#1}%
  1061.   \immediate\writec@te{\string\bibstyle{\the\toks@}}}
  1062. \def\bibstyle #1{\relax}
  1063. \newcount\bibcount
  1064. \newskip\bibparskip
  1065. \newtoks\biblabelfont
  1066. \newtoks\bibsetup
  1067. \newif\ifbibopenform
  1068. \def\setupbibliography #1{
  1069.   \bibcount=\z@
  1070.   \setbox\z@=\hbox{\the\biblabelfont [#1]\enspace}\parindent=\wd\z@
  1071.   \ifbibopenform \let\newblock=\linebreak \else \let\newblock=\relax \fi
  1072.   \setupbibliographyhook}%
  1073. \def\setupbibliographyhook {}
  1074. \def\bibpar #1{\ftpar{\the\biblabelfont [#1]}}
  1075. \def\bibitem {\futurelet\next\bib@tem}
  1076. \def\bib@tem {%
  1077.   \if[\noexpand\next
  1078.     \let\next=\bibit@m
  1079.   \else
  1080.     \let\next\b@bitem
  1081.   \fi
  1082.   \next}
  1083. \def\bibit@m [#1]#2{%
  1084.   \toks@={#1}%
  1085.   \immediate\writec@te{\string\bibcite{#2}{\the\toks@}}%
  1086.   \bibpar{#1}}
  1087. \def\b@bitem #1{%
  1088.   \advance\bibcount\@ne
  1089.   \edef\next{\number\bibcount}
  1090.   \immediate\writec@te{\string\bibcite{#1}{\next}}%
  1091.   \bibpar{\number\bibcount}}
  1092. \def\bibliography #1{%
  1093.   \toks@={#1}%
  1094.   \immediate\writec@te{\string\bibdata{\the\toks@}}%
  1095.   \begingroup                           % for latex-like defs
  1096.     \def\begin##1##2{\begingroup \setupbibliography{##2}}%
  1097.     \def\end##1{\par\endgroup}%
  1098.     \@input{\jobname.bbl}{\ywarning{{No file \jobname.bbl}}}%
  1099.   \endgroup}
  1100. \def\explicitbibliography #1#2{%
  1101.   \toks@={#1}%
  1102.   \writec@te{\string\bibdata{\the\toks@}}
  1103.   \@input{#2.bbl}{\ywarning{{No file #2.bbl}}}}
  1104. \let\ebibligraphy=\explicitbibliography
  1105. \def\bibdata #1{\relax}
  1106. \message {labels,}
  1107. \def\writel@bel {\write\m@ne}
  1108. \def\setlabelaux #1{%
  1109.   \stripn@me{}#1%
  1110.   \edef\writel@bel{\expandafter\noexpand\csname write\next \endcsname}}
  1111. \def\reference #1{%
  1112.   \expandafter\ifx \csname @lr-#1\endcsname \relax
  1113.     \expandafter\def\csname @lr-#1\endcsname{??}%
  1114.     \ywarning{{Reference #1 undefined}}%
  1115.   \else
  1116.     \csname @lr-#1\endcsname
  1117.   \fi}
  1118. \def\pagereference #1{%
  1119.   \expandafter\ifx \csname @lrp-#1\endcsname \relax
  1120.     \expandafter\def\csname @lrp-#1\endcsname{??}%
  1121.     \ywarning{{Page reference #1 undefined}}%
  1122.   \else
  1123.     \csname @lrp-#1\endcsname
  1124.   \fi}
  1125. \def\label #1#2{%
  1126.   \edef\next{#2}%
  1127.   \expandafter\ifx \csname @lr-#1\endcsname \relax
  1128.     \ywarning{{Label #1 defined as \next}}%
  1129.   \fi
  1130.   \expandafter\let\csname @lr-#1\endcsname=\next
  1131.   \writel@bel{\string\deflabel{#1}{\csname @lr-#1\endcsname}{\the\pageno}}}
  1132. \def\deflabel #1#2#3{%
  1133.   \expandafter\def\csname @lr-#1\endcsname{#2}%
  1134.   \expandafter\def\csname @lrp-#1\endcsname{#3}}
  1135. \message{initialization,}
  1136. % output routine
  1137. \output={\fixsiz@ \ytexoutput}
  1138. % page layout
  1139. \hsize=28pc \vsize=44pc
  1140. \onheaders
  1141. \offfooters
  1142. \twosidedfalse
  1143. \showcopyrightfalse
  1144. \columnskip=2pc
  1145. % displays
  1146. \abovedisplayskip=3pt plus1pt minus2pt
  1147. \belowdisplayskip=3pt plus1pt minus2pt
  1148. \abovedisplayshortskip=0pt plus1pt
  1149. \belowdisplayshortskip=2pt plus1pt minus1pt
  1150. % footnotes
  1151. \footnotemarkerwidth=10pt
  1152. \botsep={\vskip\bigskipamount \footnoterule}
  1153. % figures
  1154. \figurelinefalse
  1155. \figurelinedrop=4pt
  1156. \topsep={}
  1157. \floatingfigures
  1158. \abovecaptionskip=\medskipamount
  1159. \captionindent=2em
  1160. % tables
  1161. \tablewidth=0pt
  1162. \intabskip=\emskip
  1163. \pretabskip=\filskip
  1164. \posttabskip=\filskip
  1165. % miscellany
  1166. \abstractindent=0pt
  1167. \centerheadingsfalse
  1168. % citations and labels
  1169. \newaux\aux
  1170.   \filename \perjob
  1171.   \extension aux%
  1172.   \endnew
  1173. \setciteaux\aux
  1174. \setlabelaux\aux
  1175. \bibsetup={}
  1176. \biblabelfont={}
  1177. \bibopenformfalse
  1178. % fonts
  1179. \runnerfont={\smlsize\rm}
  1180. \footnotefont={\smlsize\rm}
  1181. \captionfont={\smlsize\rm}
  1182. \quotefont={\smlsize\rm}
  1183. \titlefont={\bigsize\bf}
  1184. \authorfont={\regsize\rm}
  1185. \abstractfont={\smlsize\rm}
  1186. \bottomtextfont={\smllsize\rm}
  1187. \chapterfont={\bigsize\bf}
  1188. \sectionfont={\regsize\bf}
  1189. \headingfont={\regsize\bf}
  1190. \lispfont={\regsize\tt}
  1191. % running text
  1192. \vpartrue
  1193. \overfullrule=0pt
  1194. \parindent=2em
  1195. \partagsep=.5em
  1196. \parskip=1pt plus2pt minus1pt
  1197. \normallineskip=2pt
  1198. \normallineskiplimit=0pt
  1199. \def\singlespace {\baselinefactor={1.3}\setnormalbaselines}
  1200. \def\doublespace {\baselinefactor={2.6}\setnormalbaselines}
  1201. \singlespace
  1202. \clubpenalty=900
  1203. \widowpenalty=900
  1204.